class_name ShotGun
extends RangedWeaponBase

# 霰弹枪特有属性
var spread_angle: float = 30.0  # 散射角度


func _ready() -> void:
	super._ready()
	var animate_sprite: AnimatedSprite2D = super.get_animated_sprite()
	# 初始化动画
	var default_anim: String = weapon_id + "_default"
	animate_sprite.play(default_anim)


# 根据武器ID加载特定的枪支属性
func load_weapon_data() -> void:
	super.load_weapon_data()

	# 霰弹枪特有的属性加载
	var data = WeaponDataManager.get_weapon_data(weapon_id)
	if data.is_empty():
		return

	# 霰弹枪特有属性：散射角度
	spread_angle = data.get("spread_angle", 30.0)

	# 确保霰弹枪默认有多发子弹
	if bullets_per_shot < 3:
		bullets_per_shot = 3  # 霰弹枪至少应该有3发子弹


# 重写发射子弹方法，实现散射效果
func fire_projectiles() -> void:
	var bullet_scene = load(bullet_scene_path)
	if not bullet_scene:
		printerr("无法加载子弹场景: ", bullet_scene_path)
		_finish_attack()
		return

	# 获取基础方向
	var base_direction: Vector2 = get_attack_direction()

	# 播放霰弹枪特有的音效（如果有的话）
	# AudioManager.play_sound("shotgun_fire")

	# 发射多个子弹，形成散射效果
	for i in range(bullets_per_shot):
		# 计算散射角度
		var angle_offset: float = 0.0
		if bullets_per_shot > 1:
			# 从散射角度的负半边到正半边均匀分布子弹
			angle_offset = lerp(-spread_angle/2, spread_angle/2, float(i) / (bullets_per_shot - 1))

		# 使用基类方法生成子弹
		spawn_bullet(bullet_scene, base_direction, angle_offset)

	# 产生后座力效果
	apply_recoil()

	# 如果没有动画，手动完成攻击
	if not animated_sprite.sprite_frames.has_animation(weapon_id + "_attack"):
		_finish_attack()


# 霰弹枪特有的后座力效果
func apply_recoil() -> void:
	# 这里可以实现后座力效果，例如短暂摇晃屏幕或角色
	# 可以发送信号给玩家或相机来实现这个效果
	pass
